AWS Elastic Beanstalk คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS
สวัสดีครับทุกคน ซูกิคาเนะ ครับ
รายการนี้จะเขียนเกี่ยวกับ AWS ปี 2022 ฉบับเบื้องต้น โดยฝ่าย Consulting ของบริษัทเราเอง
นี่เป็นบทความที่จะมาเล่าเกี่ยวกับเนื้อหา AWS Service มาเล่าใหม่อีกครั้งว่ามีอะไรถูกอัพเดทอะไรบ้างแล้ว
แบบละเอียด/เจาะลึกตั้งแต่เบสิกพร้อมคำอธิบาย โดยเหล่าสมาชิกที่เคยเขียนบทความเหล่านี้มาแล้ว
เหมาะสำหรับผู้ที่ต้องการเริ่มเรียนเกี่ยวกับ AWS หรือผู้ที่ใช้งาน AWS อยู่แล้ว
แต่ต้องการหาความรู้ใหม่ว่าปี 2022 มีการอัพเดทอะไรบ้าง หากคุณใช่บุคคลเหล่านี้
ทางผู้เขียนก็หวังว่าบทความนี้จะเป็นประโยชน์สำหรับคุณครับ
งั้นก็ไปเริ่มกันเลยครับ Theme ในวันนี้คือ "AWS Elastic Beanstalk" ครับ
AWS Elastic Beanstalk คือ
ภาพรวม
AWS Elastic Beanstalk คือ Service ของ AWS ที่ใช้สำหรับ Deploy หรือ Scaling เว็บแอปพลิเคชั่นหรือบริการต่างๆ ที่พัฒนาโดยใช้ Java, .NET, PHP, Node.js, Python, Ruby, Go และ Docker บนเซิร์ฟเวอร์ที่คุ้นเคย เช่น Apache, Nginx, Passenger และ IIS โดยมี Environments ที่สามารถสร้างได้ แบ่งออกเป็น 2 ชนิดคือ Web server environments และ worker environments
- Web server environments
- Environments สำหรับสั่งใช้งาน Web API ที่จัดการ เว็บไซต์ เว็บแอปพลิเคชั่น หรือ HTTP Request
- Worker environments
- Environments สำหรับสั่งใช้งาน Worker Application ที่ใช้เวลาในการจัดการ Workload นานแบบ On-Demand หรือ จัดการงานต่างๆตามที่ Schedule กำหนดไว้
วิธีอ่านออกเสียง "AWS Elastic Beanstalk"
AWS อ่านออกเสียงว่า เอ-ดับเบิ่ลยู-เอส อ่านเร็วๆว่า เอ-ดา-เบส
Elastic อ่านออกเสียงว่า ออล-ล้าส-ส-ติก
Beanstalk อ่านออกเสียงว่า บี้น-สุ-ตัก
โดยรวมกัน AWS Elastic Beanstalk อ่านออกเสียงว่า เอ-ดา-เบส ออล-ล้าส-ส-ติก บี้น-สุ-ตัก
จุดเด่น
AWS Elastic Beanstalk มีจุดเด่นดั่งต่อไปนี้ครับ
- มีตัวเลือกในการ Deploy แอปพลิเคชันที่หลากหลาย
- มี User Interface ที่ถูกรวมไว้เป็นหนึ่งเดียวสำหรับการใช้จัดการสถานะ Monitoring ของ แอปพลิเคชัน
- สามารถรับ Platform เวอร์ชั่นล่าสุด หรือ New Patch ได้โดยอัตโนมัติ ด้วยการใช้ "Modify managed supdates"
- สามารถปรับขนาดแอปพลิเชันให้ตรงกีบความต้องการโดยอัตโนมัติ ด้วยการใช้ ELB กับ Auto Scaling
- สามารถเลือก AWS Resource ที่เหมาะสมที่สุดกับแอปพิลชันได้ (เช่น Spot Instance หรือ EC2 Instance)
- มีแอปพลิเคชันที่หลากหลาย
platform ที่รองรับ
AWS Elastic Beanstalk มี platform ที่รองรับดั่งต่อไปนี้ครับ
- .NET Core on Linux
- .NET on Windows Server
- Go
- Java
- Node.js
- PHP
- Python
- Ruby
- Tomcat
ในตอนที่สร้าง Environments ของ Elastic Beanstalk เราสามารถเลือกได้ว่าจะเอา Platform ไหน
โดยจากภาพด้านบนจะสังเกตเห็นได้ว่าเราสามารถเลือก "Custom platform" ได้ด้วย โดยการสร้าง platform ด้วยตนเองจะทำให้สามารถใช้งานภาษาที่ไม่ร้องรับ หรือ ใช้ Infrastructure software อื่นๆ สำหรับ platform application ได้
"Custom platform" สามารถสร้างได้โดยการสร้าง AMI ที่สร้างจาก OS ที่รองรับ(เช่น Ubunt, RHEL, Amazon Linux) แล้วนำไป customize แล้วใช้ Packer สร้าง platform ของตนเอง
องค์ประกอบหลัก
มีสององค์ประกอบใหญ่ๆที่ประกอบเป็น Elastic Beanstalk คือ "Environment" และ "Application" โดยมีความเกี่ยวข้องกันตามแผนภาพด้านล่างคือ จะมี "Application" เป็นหัวข้อหลัก แล้วในแต่ละ "Application" จะมี "Environment" อยู่
หน้าที่ของ "Application" คือ การอัพโหลดหรือควบคุมแอปพลิเคชันที่สร้างขึ้น
หน้าที่ของ "Environment" คือ กำหนดสภาพแวดล้อมที่แอปพลิเคชันที่ทำงานจริง
หรือสามารถดูหน้าต่าง Console เพื่อให้เห็นภาพมากขึ้น โดยภาพภาพที่เห็นต่อไปคือภาพฝั่ง "Application"
โดยในครั้งนี้ผมได้สร้างแอปพลิเคชันที่คือว่า "supanut-test-app" แล้วให้มี 2 "Environments" ชื่อว่า "supanut-test-app-env-1" และ "supanut-test-app-env-2"
โดยมีข้อควรระวังคือ ชื่อของ "Application" และ "Environment" ไม่สามารถซ้ำกันได้ ต่อให้เป็นคนละแอปพลิเคชันก็ตาม
วิธีการอัพโหลดแอปพลิเคชัน กับ Deploy ไปที่ Environments
หากท่านผู้อ่านอยากทำตาม Blog ตั้งแต่เริ่มต้น ทางผู้จัดทำแนะนำให้เริ่มที่หัวข้อ วิธีสร้างแอปพลิเคชัน
แล้วจึงกลับมาที่หัวข้อนี้ครับ
เมื่อเรากด Application versions
ของแอปพลิเคชันเราเลือก จะแสดงให้เห็นแอปพลิเคชันที่อัพโหลดและที่ๆเรานำไป Deployed
โดยผมจะใช้ตัวอย่างเป็น cmth-website ซึ่งเป็นเว็บไซต์ของทาง Classmethod Thailand ครับ
(การจะเข้ามาหน้าต่างนี้ได้จำเป็นต้องมี Application ที่ถูก Created อยู่แล้ว)
โดยต่อจากนี้เราจะทำการ Upload
และ Deploy
แอปพลิเคชันกันครับ
วิธีการ Upload แอปพลิเคชัน
สำหรับวิธีการอัพโหลด ให้เรากดปุ่มUpload
ที่อยู่ขวาบนในหน้าต่างApplication versions
แล้วเราจะเห็นหน้าตางนี้เป็นหน้าต่างอัพโหลด โดยเพื่อให้เราแยกแยะได้ว่าคือการอัพโหลดอะไรให้ใส่ชื่อที่ "Version label:" และถ้าจำเป็นก็สามารถใส่คำอธิบายที่ "Description:" ได้ครับ
ไฟล์แอปพลิเคชันที่เลือกอัพโหลดจะอยู่ในรูป war/zip ครับ พอเราอัพโหลดเสร็จเวอร์ชั่นที่เราอัพก็จะถูกนำไปแสดงในหน้า Application versions
โดยไฟล์แอปพลิเคชันที่อัพโหลดไปนั้นจะถูกนำไปจัดเก็บใน AWS S3 โดยอัตโนมัติ
วิธีการ Deploy แอปพลิเคชัน
แค่การอัพโหลดเฉยๆจะไม่สามารถ Deploy ไปยัง Environment ที่ใช้อยู่ได้
การจะ Deploy นั้น ต้องกดไปที่ label Actions
แล้วไปที่ Deploy
โดยผมจะลอง deploy ไปที่ Environment "cmth-website-develop" ที่ใช้อยู่นะครับ
โดยเราสามารถตรวจสอบสถานะการ Deploy ได้ที่ Elastic Beanstalk > Environments > แอปพลิเคชันของเรา
หากยังอยู่ในกระบวนการ Deploy ตรง Health จะเป็นเป็นสัญลักษณ์หมุนสีเทาๆ
ถ้า Deploy เสร็จแล้วจะเป็นสัญลักษณ์เครื่องหมายถูกสีเขียวตามในภาพ
ถ้าเป็นสัญลักษณ์สีแดง หมายความว่าเกิดปัญหาขึ้น เราสามารถกดปุ่ม "Causes" เพื่อดูสาเหตุได้
พอ Deploy เสร็จสิ้นก็จะแสดงให้เห็นในหน้าต่าง Application versions
สำหรับการ Upload และ Deploy แอปพลิเคชันก็มีเพียงเท่านี้ครับ โดยถ้าสรุปอย่างง่ายๆ ก็มีแค่การอัพโหลดไฟล์แล้วก็เลือก Environment ที่จะไป Deploy แค่นี้เองครับ โดยในบทต่อไปเราจะมาแนะนำวิธีสร้างแอปพลิเคชันกันครับ
วิธีสร้างแอปพลิเคชัน
สำหรับผู้ที่ไม่เคยใช้ Amazon Elastic Beanstalk มาก่อน หรือ ไม่มีรายชื่อ Application ในหน้า Applications
กรุณาคลิกที่นี่
สำหรับผู้ที่มีรายชื่อ Application ในหน้า Applications
กรุณาคลิกที่นี่
สำหรับผู้ที่ไม่มีรายชื่อ Application ในหน้า Applications
หากเรากด Create Application
ในหน้าต่างนี้ จะเข้าสู่หัวข้อ Getting started
ซึ่งจะเป็นหน้าการสร้างแอปพลิเคชันที่มีหัวข้อที่แตกต่างจากการสอนในบทความนี้
ทางผู้จัดทำจึงขอรวบวิธีใช้วิธีการ Create application
เป็นวิธีเดียวเพื่อง่ายต่อการอธิบาย
โดยให้ผู้อ่านที่ลองทำตามเข้าไปยังหน้าต่าง Create application
โดยใช้ URL ดังต่อไปนี้เพื่อเข้าไปยังหน้า Create application
แทน
https://ap-southeast-1.console.aws.amazon.com/elasticbeanstalk/home?region=ap-southeast-1#/createNewApplication
(หากผู้อ่านใช้งาน region อื่น อย่าลืมเปลี่ยน URL ในส่วน region ด้วย)
สำหรับผู้ที่มีรายชื่อ Application ในหน้า Applications
เราสามารถแอปพลิเคชันได้โดยการเข้าไปที่ฟังชัน Applications
แล้วกด Create a new application
เริ่มการสร้างแอปพลิเคชัน
เมื่อเราเข้ามาถึงหน้านี้จะเห็นว่าจะมีแค่ให้เราใส่ "Application name" "Description" และถ้าจำเป็นก็ใส่ Tag
พอเราสร้างเสร็จแล้วกดCreate
แอปพลิเคชันของเราก็จะไปขึ้นโชว์ที่ List ในหน้า "All Application"
สำหรับขั้นตอนการสร้าง Application ก็มีเพียงเท่านี้ครับ
วิธีสร้าง Environments
เราสามารถสร้าง environment จาก application ได้โดยการเข้าไปที่ ✅เลือกแอปพลิเคชันที่เราจะสร้าง environment
กด Actions
กด Create environment
แล้วจะมีให้เราเลือก environment tier โดยครั้งนี้ผมจะใช้ Web server environment ครับ
พอเราเลือก environment tier เราจะต้องเขียน Environment name
และ Description
เราสามารถกำหนดชื่อของ Domain ได้ ถ้าเราไม่ตั้ง ชื่อของ Domain จะถูกตั้งโดยอัตโนมัติเป็น [environment name].xxxx.[ชื่อRegion].elasticbeanstalk.com
หากคุณผู้อ่านต้องการเข้าถึงด้วย Domain ของคุณผู้อ่านเอง ให้คุณผู้อ่านระบุ "[environment name].xxxx.[ชื่อRegion].elasticbeanstalk.com"
ใน CNAME Record ใน DNS ของ Domian ของคุณผู้อ่านเอง หากคุณผู้อ่านใช้ Route 53 ในการจัดการโดเมนของคุณผู้อ่าน คุณผู้อ่านสามารถใช้ Alias Target แทนได้
หากคุณผู้อ่านต้องการเข้าใจถึงความแตกต่างของ CNAME Record ของ Route 53 กับ Alias Target สามารถดูได้ในลิ้งค์ด้านล่างนี้
(แต่ถ้าจะให้อธิบายให้เข้าใจง่ายๆก็คือ Alias Target แตกต่างจาก CNAME Query ตรงที่ไม่เสียตัง)
ในขั้นต่อไปเราสามารถเลือก platform กับ แอปพลิเคชันที่จะ Deploy ได้ครับ ถ้าไม่ต้องการตั้งค่าอะไรเพิ่มเติมก็ให้กด Create environment
ได้เลยครับ แต่ถ้าอยากจะตั้งค่าแบบละเอียดก็สามารถกดได้ที่Configure more options
ครับ
หากเรากด Configure more options
จะถูกส่งไปอีกหน้านึงที่สามารถตั้งค่า Preset หรือ Category ต่างๆ ได้อย่างละเอียด
รายการที่สามารถตั้งค่าได้
ในหมวด Configure more options
ผมได้จัดทำตารางว่ามีหมวดหมู่การตั้งค่าอะไรบ้างมาให้ดูแล้วครับ
category | ตัวอย่างเนื้อหาการตั้งค่าที่สามารถทำได้ |
---|---|
Software | Proxy server, AWS X-Ray, S3 log storage, Instance log streaming to CloudWatch Logs, Environment properties |
Instances | Root volume (boot device), Instance metadata service (IMDS), EC2 security groups |
Capacity | Auto scaling group setting(Fleet composition, Instance types, AMI ID, Availability Zones), Scaling triggers |
Load balancer | Load balancer type, Listener, process, role, Log save settings |
Rolling updates and deployments | Application deployment policy, Configuration updates, Deployment preferences(health check, Command timeout) |
Security | Service role, Virtual machine permissions(EC2 key pair, IAM instance profile) |
Monitoring | Health reporting, Health event streaming to CloudWatch Logs |
Managed Updates | Managed platform updates, Update level, Instance replacement |
Notifications | Email notifications |
Network | Virtual private cloud (VPC), Instance subnets or ELB, Database subnets |
Database | RDS Database settings(Engine, Instance class, Storage, MultiAZ), Database deletion policy |
Tags | environments resource tags |
Rolling updates and deployments
จากในตารางด้านบน สิ่งที่เราอยากจะให้คุณผู้อ่านเข้าใจเป็นพิเศษก็คือ "Rolling updates and deployments" โดยเจ้านี้จะมีหน้าที่ในการกำหนดว่า เมื่อมีการ Deploy แอปพลิเคชันใหม่ไปที่ environment ที่มีอยู่แล้วจะแสดงผลอย่างไร หรือ เมื่อมีการปรับโครงสร้างของ environment เดิม จะต้องปรับการตั้งค่าอย่างไร
Application deployments
มีทั้งหมด 5 แบบครับ
- All at once
- Rolling
- Rolling with additional batch
- Immutable
- Traffic splitting: อนุญาตให้แค่ ALB ไม่สามารถใช้กับ NLB กับ CLB
โดยสามารถดูการเปรียบเทียบได้ที่ลิ้งค์ด้านล่างนี้ครับ
ถ้าจะให้พูดถึง Policy นึงที่น่าสนใจคือ Immutable (ไม่สามารถเปลี่ยนได้)
Immutable มีผลกระทบต่อ environment การทำงานเพียงเล็กน้อย แต่ต้องใช้เวลาในการ Deploy เนื่องจากจำเป็นต้องเปลี่ยน environment ที่สร้างเรียงกันให้ไปในทางทิศเดียวกัน
หากไม่ต้องการให้มีผลกระทบต้องผู้ใช้งานแอปพลิเคชัน ก็สามารถเลือก Policy ที่เน้นผลกระทบน้อยลง
และหากไม่มีปัญหาแม้ว่าจะได้รับผลกระทบจาก environment การพัฒนา ก็สามารถเลือก Policy ที่เน้นความเร็ว
Configuration updates
มีทั้งหมด 4 แบบครับ
- Disabled
- Rolling Based on Health
- Rolling Based on Time
- Immutable
โดยสามารถดูการเปรียบเทียบได้ที่ลิ้งค์ด้านล่างนี้ครับ
การใช้ Blue/Green deployment ด้วย Elastic Beanstalk
นอกจาก Deployment policies(Disabled, Rolling Based on Health, Rolling Based on Time, Immutable) ด้านบนแล้ว ยังมี Blue/Green deployment ที่สามารถใช้ได้ผ่านฟังก์ชันอื่น โดยอยู่ที่ "Swap environment URLs"
ตอนที่สร้าง environment เราสามารถสลับ environment URL ที่กำหนด โดยกดเลือก environment URL ที่ต้องการสลับ แล้วกด Swap
DNS ที่ควบคุมอยู่ก็สามารถใช้ Blue/Green deployment ได้ แต่จุดสำคัญคือ Elastic Beanstalk สามารถใช้งานได้ด้วยฟังก์ชันของมันเอง
มีอีกจุดระวังก็คือ URL สามารถเปลี่ยนได้ แต่ชื่อ environment จะไม่เปลี่ยนตาม อาจจะทำให้งงกันได้
EB CLI
บทที่ผ่านมาเราเรียนรู้เกี่ยวกับการใช้ AWS Elastic Beanstalk ผ่าน AWS Management Console มาแล้ว
คราวนี้เราจะมาเรียนเกี่ยวกับ EBI CLI ที่เป็น Command Line Tool ของ Elastic Beanstalk โดยเฉพาะกันครับ(แต่ Elastic Beanstalk เองก็สามารถใช้ผ่าน AWS CLI หรือ SDK ได้เหมือนกันครับ) สำหรับใครที่อยากใช้ Elastic Beanstalk จนแตกฉาน ก็ขอแนะให้ไปลองใช้กันครับ
วิธีการติดตั้ง (Mac, Windows)
สำหรับ MacOS
สำหรับ Windows
การตั้งค่าเริ่มต้น (eb init)
พอ Install EB CLI เสร็จแล้วให้ให้คำสั่ง eb init แล้วเลือก Region, การตั้งค่า Project Directory และแอปพลิเคชันที่จะใช้ควบคุม
การจัดการ Environments
เมื่อเราตั้งค่าเริ่มต้นเสร็จสิ้นแล้วจะต้องใช้คำสั่งต่างๆเพื่อควบคุม หรือ จัดการ Environments
ในกรณีต้องการตั้งค่าแบบละเอียด(.ebextensions)
ในบางครั้งเราอาจจะจำเป็นต้อง Customize การส่งเมลล์ผ่าน EC2 Instance หรือ การวางไฟล์ตั้งค่าไว้ที่ S3, EFS ในตอนที่ Deploy บ้าง
สิ่งที่ไม่สามารถทำผ่าน Console ได้ เราสามารถใช้ผ่าน ebextensions ได้ครับ
โดยถ้าให้อธิบายก็คือ เราจะสร้าง Directory ที่ชื่อว่า .ebextensions แล้วสร้างไฟล์ใส่ไว้
แล้วอัพโหลดไฟล์ zip ที่รวมแอปพลิชันไว้อยู่ใส่ไว้ในโฟล์เดอร์ จะทำให้ที่ๆเรา Deploy ถูกอัพเดทไปด้วยตามไฟล์ที่อัพ
ตัวอย่างไฟล์ที่จะใส่ใน .ebextensions
ชื่อไฟล์: .ebextensions/network-load-balancer.config
option_settings: aws:elasticbeanstalk:environment: LoadBalancerType: network
โดยตามที่เขียนด้านบน คือการตั้งค่าประเภทของ Load Balancer ของ environment ให้เป็น Network Load Balancer ครับ
แต่การตั้งค่าแบบนี้ สามารถทำได้ทั้งใน AWS Management Console และ AWS CLI ทำให้จะมีลำดับความสำคัญของแต่ละการตั้งค่า ซึ่งจะอยู่ในหัวข้อต่อไปครับ
(คือถ้าการตั้งค่าในแต่ละที่มันต่างกัน AWS Elastic Beanstalk จะเลือกใช้อันไหนเป็นหลักนั่นเอง)
ลำดับความสำคัญของการตั้งค่าตอนสร้าง Environments
ที่จะเขียนต่อจากนี้เป็นลำดับความสำคัญ เรียงจากมากสุดไปน้อยสุดครับ
- การตั้งค่าที่ถูกปรับใช้งานให้กับ environment โดยตรงทันที - การถูกปรับการตั้งค่าโดย Client ที่เรียกใช้ Elastic Beanstalk API ผ่าน Elastic Beanstalk console, EB CLI, AWS CLI หรือ SDK ในตอนที่สร้าง หรือ อัพเดท environment
- การตั้งค่าที่ถูกบันทึกไว้ - การตั้งค่าที่จะถูกโหลดจากการตั้งค่าที่ถูกบันทึกไว้ หากไม่ถูกระบุใน Option การตั้งค่าของที่ถูกปรับใช้งานให้กับ environment โดยตรงทันที(อันด้านบนนี้)
- ไฟล์การตั้งค่า (.ebextensions) - การตั้งค่าจะถูกโหลดจากการตั้งค่าที่ถูกบันทึกไว้จากไฟล์
.ebextensions
ของโฟล์เดอร์การตั้งค่าที่อยู่ใน root ของ Application source bundle หากไม่ถูกระบุใน Option การตั้งค่าของที่ถูกปรับใช้งานให้กับ environment โดยตรงทันที หรือ การตั้งค่าที่ถูกบันทึกไว้(อันด้านบนนี้)
โดยไฟล์จะถูก Run ตามลำดับของตัวอักษร เช่น .ebextensions/01run.config
จะถูก Run ก่อน .ebextensions/02run.config
* ค่า Default - ถ้าในการตั้งค่าในด้านบนที่กล่าวมาไม่ได้ถูกตั้งค่าไว้ และ การตั้งค่าของตัว Object มีค่า Default อยู่ จะถูกปรับใช้ตามค่าที่กำหนดในนี้
การตั้งค่า Ebextensions สำหรับ OS ของ EC2 Instance ของคุณ
ถ้าใส่ Key ที่เขียนอยู่ด้านล่างนี้ จะทำให้สามารถ Customize EC2 Instance ของ OS นั้นๆ ได้
กรณีของเซิร์ฟเวอร์ Linux
Key | สิ่งที่ทำได้ |
---|---|
packages | ดาวน์โหลดและ Install แพ็คเกจ Application กับ Component |
groups | สร้าง Group ของ Linux/UNIX แล้วกำหนด Group ID |
users | สร้าง User ของ Linux/UNIX ใน EC2 Install |
sources | ดาวน์โหลด Archive file จาก Public URL แล้ว Unzip ที่ Target Directory ใน EC2 Instance |
files | สร้างไฟล์ใน EC2 Instance |
commands | Run คำสั่งใน EC2 Instance |
services | กำหนด Services ที่จำเป็นต้อง Started หรือ Stopped เมื่อ Instance เริ่มขึ้น |
container_commands | Run คำสั่ง ที่มีผลกระทบต่อ source code ของ application ใช้ `leader_only` เพื่อ Run คำสั่งใน Instance 1 ตัว, Run คำสั่ง กำหนดการตั้งค่าเป็น `true` สำหรับให้ test command แสดงผลออกมาเป็น `test`
[หมายเหตุ] คำสั่ง `leader_only` จะมีผลในแค่ในตอนสร้าง environment หรือ deploy เท่านั้น คำสั่งอื่น หรือ Server customization operation จะถูก Run เมื่อ Instance provisioned หรือ อัพเดท คำสั่ง `leader_only` จะไม่ถูก Run ตามการปรับเปลี่ยนของการตั้งค่าเริ่มต้นของ AMI ID หรือ ประเภท Instance |
กรณีของเซิร์ฟเวอร์ Windows
Key | สิ่งที่ทำได้ |
---|---|
packages | ดาวน์โหลดและ Install แพ็คเกจ Application กับ Component |
sources | ดาวน์โหลด Archive file จาก Public URL แล้ว Unzip ที่ Target Directory ใน EC2 Instance |
files | สร้างไฟล์ใน EC2 Instance |
commands | Run คำสั่งใน EC2 Instance |
services | กำหนด Services ที่จำเป็นต้อง Started หรือ Stopped เมื่อ Instance เริ่มขึ้น |
container_commands | ใช้ Key container_commands เพื่อ Run คำสั่งที่มีผลกระทบต่อ source code ของ application ใช้ Option ของ leader_only เพื่อ Run คำสั่งใน Instance 1 ตัว, Run คำสั่ง กำหนดการตั้งค่าเป็น `true` สำหรับให้ test command แสดงผลออกมาเป็น `test`
[หมายเหตุ] คำสั่ง `leader_only` จะมีผลในแค่ในตอนสร้าง environment หรือ deploy เท่านั้น
Command อื่น หรือ Server customization operation จะถูก Run เมื่อ Instance provisioned หรือ อัพเดท
|
ebextensions เป็นศาสตร์ที่ลึกซึ้งครับ แต่มี Sample เตรียมไว้ให้ศึกษาอยู่ครับ โดยสามารถดูได้ที่ลิ้งค์ด้านล่างสุดที่อยู่ใน บทความที่เกี่ยวข้องนะครับ
การใช้ Custom Amazon Machine Image (AMI)
Custom AMIs ยังสามารถใช้ในแนวทางในการ Customize environment ที่แตกต่างได้ด้วยครับ
Monitoring
ในหัวข้อนี้เราจะมาแนะนำวิธีการ Monitoring ของ Elastic Beanstalk environment ครับ
หน้าต่าง Monitoring Environments
ในหน้าต่าง Console ของ แอปพลิเคชันของเรา เราสามารถเลือกฟังก์ชัน Monitoring
เพื่อตรวจสอบสถานะต่างๆจาก Dashboard ได้
Health report
ในหน้าต่าง Console ของ แอปพลิเคชันของเรา เราสามารถเลือกฟังก์ชัน ชื่อแอปพลิเคชันของเรา
เพื่อตรวจสอบสถานะ "Health" ได้
โดยจะมีสีต่างๆแสดงสถานะอยู่
สี | คำอธิบาย |
---|---|
เทา | อยู่ในระหว่างอัพเดท environment |
เขียว | environment ผ่าน Health Check ครั้งล่าสุด มี Instance อย่างน้อย 1 ตัวใน environment ที่ทำงานได้ และ กำลังรับ Request ต่างๆอยู่ |
เหลือง | มี Instance อย่างน้อย 1 ตัวใน environment ของแอปพลิเคชันเราไม่ผ่าน Health Check หรือ มี Request บางอย่างที่ส่งไป environment เกิดความล้มเหลว |
แดง | มี Instance อย่างน้อย 3 ตัวใน environment ของแอปพลิเคชันเราไม่ผ่าน Health Check, Resource ของ environment ไม่สามารถใช้งานได้ หรือ Request บางอย่างที่ส่งไป environment เกิดความล้มเหลวอย่างต่อเนื่อง |
ในหน้าต่างของ Health
สามารถตรวดสอบสถานะของแต่ละ Instance ได้
Alarm Control
เราสามารถตั้งค่า Alarm ได้จากไอค่อน กระดิ่ง ในหน้าต่าง Monitoring
อ้างอิง: การควบคุม Alarm AWS Offical Document
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.alarms.html
เราสามารถตรวจสอบ Alarm ได้จากฟังก์ชัน Alarm
ครับ
ดูประวัติการเปลี่ยนแปลงของ Elastic Beanstalk
ในส่วน Top ของฟังก์ชันจะมี Change history
ที่สามารถตรวจสอบ Change history ที่อยู่ใน Region นั้นๆได้
ดู Streaming Event ของ Elastic Beanstalk Environments
เราสามารถตรวจสอบ Events ที่อยู่ในแต่ละ environment ได้ที่ฟังก์ชัน Event
ครับ
ดู Logs ของ Amazon EC2 Instance ใน Elastic Beanstalk Environments
ในฟังก์ชัน Logs
เราสามารถ Request Log ที่อยู่ใน Instance ทั้งหมดได้ โดยสามารถตรวจสอบได้โดยไม่ต้อง Login ครับ
Logs จะถูกบันทึกในตำแหน่งมาตรฐาน ของ Amazon EC2 Instance ที่อยู่ใน environment โดยจะมี Logs ตามด้านล่างนี้ที่ถูกสร้างจาก Elastic Beanstalk
Linux
/var/log/eb-activity.log
/var/log/eb-commandprocessor.log
Windows Server
C:\Program Files\Amazon\ElasticBeanstalk\logs\
C:\cfn\logs\cfn-init.log
Logs เหล่านี้นั้น มี Message ที่เกี่ยวกับการตั้งค่าไฟล์, Message ที่เกี่ยวกับ Deployment activity ปะปนอยู่ครับ
แต่ละแอปพลิเคชัน กับ Web Server จะมี Logs อยู่ในโฟลเดอร์ที่ถูกกำหนดไว้แล้ว
- Apache –
/var/log/httpd/
- IIS –
C:\inetpub\wwwroot\
- Node.js –
/var/log/nodejs/
- nginx –
/var/log/nginx/
- Passenger –
/var/app/support/logs/
- Puma –
/var/log/puma/
- Python –
/opt/python/log/
- Tomcat –
/var/log/tomcat8/
ค่าใช้จ่าย
ตัว AWS Elastic Beanstalk Service นั้นไม่มีการเสียค่าใช้จ่ายเพิ่มเติมครับ
แต่จะมีค่าใช้จ่ายในส่วนของ AWS Resource ต่างๆ ในที่เกิดจาก Run แอปพลิเคชันที่ถูกสร้างหรือจำเป็นต่อการจัดเก็บใช้งานเช่น EC2, S3, ELB, RDS โดย AWS Elastic Beanstalk เท่านั้นเองครับ
สรุป
เป็นยังไงกันบ้างครับสำหรับบทความ AWS Elastic Beanstalk สำหรับผมนับเป็น Service ที่มีประโยชน์กันมากเลยทีเดียว โดยเราสามารถสร้าง Run แอปพลิเคชันต่างๆที่เราคุ้นเคย โดยไม่จำเป็นลงมือจัดการอะไรหลายๆอย่าง แค่เราเลือกประเภทภาษาและเซิฟเวอร์ที่ใช้ เราสามารถเตรียม Environment สำหรับการใช้งานจริงได้แล้ว
และยังมีในการควบคุมจัดการที่สามารถพ่วงกับ Services อื่นๆของ AWS ได้อีก ใครที่สนใจศึกษาเพิ่มเติมสามารถดูได้ที่บทความที่เกี่ยวข้องด้านล่างกันได้นะครับ
บทความที่เกี่ยวข้อง
- GitHub - awsdocs/elastic-beanstalk-samples: This repository contains code and configuration samples (e.g. .ebextensions) for AWS Elastic Beanstalk.
- Deploying a Java Web Application using AWS EBS | DevelopersIO
บทความที่เกี่ยวของภาษาญี่ปุ่น
- AWS Elastic Beanstalkで使えるデプロイポリシーを理解する | DevelopersIO
- [アップデート]Elastic BeanstalkでAWS GravitonベースのEC2インスタンスタイプがサポートされたので試してみた | DevelopersIO
- AWS Elastic Beanstalkで生成したRDSが、Beanstalk環境から切り離せるようになりました | DevelopersIO
- AWS Elastic Beanstalkで使えるデプロイポリシーを理解する | DevelopersIO
- Elastic Beanstalk コマンドラインインターフェイス (EB CLI) での環境プロパティの指定方法 | DevelopersIO
- AWS再入門2018 自動構成・デプロイサービス編 | DevelopersIO
- AWS再入門 AWS Elastic Beanstalk編 | DevelopersIO